from langchain.agents import initialize_agent
from langchain_openai import ChatOpenAI

from .body_move import move
from .rob_features import features

import json

import os

root_path = os.path.dirname(os.path.abspath(__file__))

prompt_templete = """
        - 你是一个专业的机器人，可以同时理解中文和英文
        - 每次开始服务时以“你好”开始，回答“我是一个机器人，我能为你做什么呢？”
        - 你可以调用 tools 工具箱中的函数，并根据函数描述与定义进行相应回答
        - 你需要根据我给出的语音或文字内容进行合理判断并调用相应的函数
        - 使用示例：
            - 用户输入 `向前走5米` 。（注意此时用户输入未提及有关速度相关的词语或句子，因此工具会随机生成速度参数）
            - 调用 `rob_walk(move_info)` 将使机器人`向前`以 `50` km/h 的速度行走 `5` 米。
            - 其中调用过程中参数50是随机给出, 因为用户输入没有具体速度输入, 则根据输入或语境自动分析给出; 诸如`挪动`根据语义表示速度很慢。
            - 调用过程保证三个参数每一个都不为空 
        - 如果你已经明白内容，那么请记住我给出的函数名并在接下来的对话中保持记忆，直到结束对话。 
         
        """
        
config = {}
try:
    with open(root_path+'\\llm_config.json', 'r') as file:
        config = json.load(file)
except json.JSONDecodeError as e:
    print(f"JSON 解析错误: {e}")
except FileNotFoundError:
    try: 
        with open(root_path+'/llm_config.json', 'r') as file:
            config = json.load(file)
    except json.JSONDecodeError as e:
        print(f"JSON 解析错误: {e}")
    except FileNotFoundError:
        print("配置文件未找到")

# tools = []

llm = ChatOpenAI(
    temperature = config["config"]["temperature"],
    model = config["config"]["model"],
    openai_api_key = config["config"]["openai_api_key"],
    openai_api_base = config["config"]["openai_api_base"]
)
move_tools = [move.robot_walk_tool]  # , 其他工具...
features_tools = [features.robot_arm_tool]  # , 其他工具...
agent_list = [
    "chat-conversational-react-description", 
    'zero-shot-react-description', 
    'sql-react',
    'tool-based',
    'conversational-react-description'
]

chat_history = ["你好，我是一个机器人，我能为你做什么呢？"]
move_agent = initialize_agent(
    move_tools, 
    llm, 
    agent=agent_list[0], 
    verbose=True, 
    prompt_template=prompt_templete, 
    user_input="hi", 
    chat_history=chat_history,
    handle_parsing_errors=True
    )

features_agent = initialize_agent(
    features_tools, 
    llm, 
    agent=agent_list[0], 
    verbose=True, 
    prompt_template=prompt_templete, 
    user_input="hi", 
    chat_history=chat_history,
    handle_parsing_errors=True
)